home *** CD-ROM | disk | FTP | other *** search
/ FM Towns: Free Software Collection 7 / FM Towns Free Software Collection 7.iso / taropyon / hewin / ccisrc / install.cci < prev    next >
Text File  |  1993-11-30  |  10KB  |  389 lines

  1. /*************************************************************************
  2. *    HEwin installer
  3. *************************************************************************/
  4.  
  5. #include    "ccilib.h"
  6.  
  7. /*    パレットデータ    */
  8. char    PltDat[3][16] =
  9. {
  10.     /* G R  B                                */
  11.     { 0, 0, 0},    /* C_BALCK                    */
  12.     { 0, 0, 0},    /* C_BLUE or C_THROUGH        */
  13.     { 7, 7, 8},    /* C_RED                    */
  14.     {12,12,13},    /* C_MAGENTA                */
  15.     { 6, 5, 7},    /* C_GREEN                    */
  16.     { 8, 7, 9},    /* C_CYAN                    */
  17.     {10, 9,11},    /* C_YELLOW                    */
  18.     {11,11,12},    /* C_WHITE                    */
  19.  
  20.     { 5, 5, 6},    /* C_HBALCK                    */
  21.     { 0, 0,11},    /* C_HBLUE                    */
  22.     { 0,11, 0},    /* C_HRED                    */
  23.     { 0,11,11},    /* C_HMAGENTA                */
  24.     {11, 0, 0},    /* C_HGEEN                    */
  25.     {11, 0,11},    /* C_HCYAN                    */
  26.     {11,11, 0},    /* C_HYELLOW                */
  27.     {14,14,15}    /* C_HWHITE                    */
  28. };
  29.  
  30. /*************************************************************************
  31. *    初期化
  32. *************************************************************************/
  33. int        init()
  34. {
  35.     int        i;
  36.  
  37.     DSP_sysInit(0);            /* 表示システム初期化        */
  38.     KBF_sysInit();            /* キーボードシステム初期化    */
  39.     KBF_kan_off();
  40.     FDL_sysInit();            /* ファイルダイアログ初期化    */
  41.  
  42.     sdk_control(0);            /* サイドワーク起動禁止    */
  43.     for ( i = 0; i < 2; ++i )
  44.     {
  45.         DSP_writePage(i);
  46.         DSP_setPlt( PltDat );    /* パレット設定            */
  47.     }
  48.  
  49.     DSP_writePage(1);
  50.     DSP_title("INSTALL","0.99",15,7,0,0);
  51.     evt_setDspTime( 1, 432, 4, 7, 0 );    /* 時刻表示アイドリング処理設定    */
  52.     SYL_clear();
  53. }
  54.  
  55. /*************************************************************************
  56. *    終了
  57. *************************************************************************/
  58. int        term()
  59. {
  60.     FDL_sysEnd();
  61.     KBF_sysEnd();
  62.     DSP_sysEnd();
  63. }
  64.  
  65. char    StartPath[256];
  66. char    ItmPath[256];        /* アイテムファイル    */
  67.  
  68. char    *File1[11] =            /* インストールするファイル    */
  69. {
  70.     "hewin.exp",
  71.     "*.dll",
  72.     "hewin.cci",
  73.     "hewin.icn",
  74.     "hewin.tif",
  75.     "tdptmp.tbl",
  76.     "hewin.ggg",
  77.     "*.doc",
  78.     "*.hlp",
  79.     "makecci.bat",
  80.     NULL
  81. };
  82.  
  83. char    *File2[5] =        /* インストールするファイル(EXP)    */
  84. {
  85.     "cci.exp",
  86.     "lhx.exp",
  87.     "rz.exp",
  88.     "sz.exp",
  89.     NULL
  90. };
  91.  
  92. char    *File3[4] =        /* インストールするファイル(CCI)    */
  93. {
  94.     "cpp.exe",
  95.     "*.h",
  96.     "*.cci",
  97.     NULL
  98. };
  99.  
  100. #define    FRM_X1(_frm)    _frm[0]
  101. #define    FRM_Y1(_frm)    _frm[1]
  102. #define    FRM_X2(_frm)    _frm[2]
  103. #define    FRM_Y2(_frm)    _frm[3]
  104.  
  105. int        item_set_newpos( short *newfrm )
  106. {
  107.     int            ret;
  108.     int            fpos, nextFPos;
  109.     int            etyNum;
  110.     short        icnNum;
  111.     char        ttlStr[128];
  112.     char        pathStr[128];
  113.     char        paraStr[128];
  114.     int            atrInf;
  115.     int            nextFPos;
  116.     short        frm[4];
  117.  
  118.     fpos = 0;
  119.     FRM_X1(newfrm) = 0;
  120.     FRM_Y1(newfrm) = 0;
  121.     FRM_X2(newfrm) = 0;
  122.     FRM_Y2(newfrm) = 0;
  123.     while ( (fpos = ITM_GetPhysclNextFPos( ItmPath, fpos )) > 0 )
  124.     {
  125.         if ( ITM_GetStair( ItmPath, fpos ) == 0 )
  126.         {    /* ルートのみ    */
  127.             ret = ITM_GetItmType(ItmPath,fpos);
  128.             switch ( ret )
  129.             {
  130.                 case 1:    /* group */
  131.                     ITM_GetGrpData(ItmPath,fpos,&etyNum,&icnNum,ttlStr,&nextFPos,frm);
  132.                     break;
  133.                 case 2:    /* apllication */
  134.                     ITM_GetAplData(ItmPath,fpos,&icnNum,ttlStr,pathStr,paraStr,atrInf,frm);
  135.                     break;
  136.             }
  137.             if ( FRM_X1(newfrm) < FRM_X2(frm) )
  138.                 FRM_X1(newfrm) = FRM_X2(frm);
  139.             if ( FRM_Y1(newfrm) < FRM_Y2(frm) )
  140.                 FRM_Y1(newfrm) = FRM_Y2(frm);
  141.         }
  142.     }
  143.     FRM_Y1(newfrm) = FRM_Y1(newfrm) + 15;
  144.     FRM_X2(newfrm) = FRM_X1(newfrm) + 24;
  145.     FRM_Y2(newfrm) = FRM_Y1(newfrm) + 24;
  146.  
  147.     if ( FRM_X2(newfrm) > 621 )
  148.     {
  149.         FRM_X2(newfrm) = 621;
  150.         FRM_X1(newfrm) = FRM_X2(newfrm) - 24;
  151.     }
  152.     if ( FRM_Y2(newfrm) > 410 )
  153.     {
  154.         FRM_Y2(newfrm) = 410;
  155.         FRM_Y1(newfrm) = FRM_Y2(newfrm) - 24;
  156.     }
  157. }
  158.  
  159. /*************************************************************************
  160. *    インストール
  161. *************************************************************************/
  162.  
  163. int        install()
  164. {
  165.     int        i, ret, len;
  166.     char    *btn;
  167.     char    *fdl;
  168.     int        drv;
  169.     char    *p, tmp[256], path[256], ccipath[256], whare[256], src[256], prog[256];
  170.     short    frm[4];
  171.  
  172. _RETRY:
  173.     DSP_writePage(1);
  174.     btn = MNU_allocBtn( 2 );
  175.     MNU_setBtn( btn, 0, '\r'  , KA_EXEC  , 1, "INSTALL : [実行]" );
  176.     MNU_setBtn( btn, 1, '\x1B', KA_CANCEL, 2, "CANECEL : [取消]" );
  177.     ret = MNU_selectBtn( DLGPOS_CENTER_OF_SCN, DLGPOS_CENTER_OF_SCN, 
  178.         C_MBLACK, C_DLGBASE, COLMIX(C_INFO,C_GRAY), SELBTN_ATT_LEFT, 2, btn,
  179.         "    HEwin のインストールを行いますか?  ");
  180.     MNU_freeBtn( btn );
  181.     if ( ret != 1 )
  182.         return (0);
  183.  
  184.     DLG_tmpMsgTime( DLGPOS_CENTER_OF_SCN, DLGPOS_CENTER_OF_SCN,
  185.         C_MBLACK, C_DLGBASE, COLMIX(C_INFO,C_GRAY),
  186.         3, "\n    インストール先に移動してください。  \n" );
  187.  
  188.     /* インストール    */
  189.     if ( (fdl = FDL_open(0)) == NULL )
  190.         return (-1);
  191.     FDL_set_title( fdl,"インストール先指定");
  192.     FDL_set_wildcard( fdl, "*.*");
  193.     ret = FDL_start(fdl);
  194.     if ( ret == NORMAL )
  195.     {
  196.         drv = FDL_get_drv(fdl);
  197.         strcpy( whare, FDL_get_whare(fdl) );
  198.     }
  199.     FDL_close(fdl);
  200.     if ( ret )
  201.         goto _RETRY;
  202.  
  203.     sprintf( tmp, "%c:/%s", drv+'A', whare );
  204.     len = strlen(tmp);
  205.     if ( len > 0 && tmp[len-1] != '/' && tmp[len-1] != '\\' )
  206.     {
  207.         tmp[len++] = '/';
  208.         tmp[len]   = '\0';
  209.     }
  210.     sprintf( path, "%sHEWIN", tmp);
  211.  
  212.     ret = FS_isFileExist(path);
  213.     if ( ret == 0 )
  214.     {    /* ファイルは存在しない    */
  215.         /* ディレクトリ作成確認    */
  216.         btn = MNU_allocBtn( 2 );
  217.         MNU_setBtn( btn, 0, '\r'  , KA_EXEC  , 1, "MKDIR : [実行]" );
  218.         MNU_setBtn( btn, 1, '\x1B', KA_CANCEL, 2, "CANECEL : [取消]" );
  219.         ret = MNU_selectBtn( DLGPOS_CENTER_OF_SCN, DLGPOS_CENTER_OF_SCN, 
  220.             C_MBLACK, C_DLGBASE, COLMIX(C_INFO,C_GRAY), SELBTN_ATT_CENTER, 2, btn,
  221.             "    インストール先にディレクトリを作成します。  \n%s", path );
  222.         MNU_freeBtn( btn );
  223.         if ( ret != 1 )
  224.             goto _RETRY;
  225.         FS_mkdir(path);
  226.     } else if ( ret == 1 )
  227.     {    /* ファイルが存在    */
  228.         MNU_sure( DLGPOS_CENTER_OF_SCN, DLGPOS_CENTER_OF_SCN,
  229.             C_MBLACK, C_DLGBASE, COLMIX(C_ERROR,C_GRAY), SELBTN_ATT_CENTER,
  230.             "    %s    \n    インストール先に同名のファイルが存在しています。  ", path );
  231.         goto _RETRY;
  232.     }
  233.  
  234.     /* インストール先確認    */
  235.     btn = MNU_allocBtn( 2 );
  236.     MNU_setBtn( btn, 0, '\r'  , KA_EXEC  , 1, "INSTALL : [実行]" );
  237.     MNU_setBtn( btn, 1, '\x1B', KA_CANCEL, 2, "CANECEL : [取消]" );
  238.     ret = MNU_selectBtn( DLGPOS_CENTER_OF_SCN, DLGPOS_CENTER_OF_SCN, 
  239.         C_MBLACK, C_DLGBASE, COLMIX(C_INFO,C_GRAY), SELBTN_ATT_CENTER, 2, btn,
  240.         "  インストール先 : %s  \n    インストールを行いますか?  ", path );
  241.     MNU_freeBtn( btn );
  242.     if ( ret != 1 )
  243.         goto _RETRY;
  244.  
  245.     /* 複写元にカレントを移動    */
  246.     sprintf( tmp, "%s.", StartPath );
  247.     FS_chdrv( toupper(StartPath[0]) - 'A' );
  248.     FS_chdir( tmp );
  249.  
  250.     /* HEwin 本体及び関連ファイル    */
  251.     ret = i = 0;
  252.     while ( (p = File1[i++]) != NULL && ret == 0 )
  253.     {
  254.         SYL_puts( C_INFO, "copy %s", p );
  255.         ret = FM_fcopy( p, 0x00, FCOPY_OVERWRITE_CHECK|FCOPY_LAST_MSG_IGN, path, "" );
  256.     }
  257.  
  258.     if ( drv > 1 && ret == NORMAL )
  259.     {    /* 外部ユーティリティ */
  260.         ret = i = 0;
  261.         while ( (p = File2[i++]) != NULL && ret == 0 )
  262.         {
  263.             SYL_puts( C_INFO, "copy %s", p );
  264.             if ( FS_isFileExist(p) == 0 )
  265.                 continue;
  266.             ret = FM_fcopy( p, 0x00, FCOPY_OVERWRITE_CHECK|FCOPY_LAST_MSG_IGN, path, "" );
  267.         }
  268.     }
  269.  
  270.     if ( drv > 1 && ret == NORMAL )
  271.     {    /* CCI */
  272.         /* 複写元にカレントを移動    */
  273.         sprintf( tmp, "%sCCISRC", StartPath );
  274.         FS_chdrv( toupper(StartPath[0]) - 'A' );
  275.         FS_chdir( tmp );
  276.  
  277.         sprintf( ccipath, "%s/CCISRC", path );
  278.         if ( (ret = FS_isFileExist(tmp)) == 0 )
  279.         {
  280.             FS_mkdir(ccipath);
  281.         } else if ( ret == 1 )
  282.         {
  283.             MNU_sure( DLGPOS_CENTER_OF_SCN, DLGPOS_CENTER_OF_SCN,
  284.                 C_MBLACK, C_DLGBASE, COLMIX(C_ERROR,C_GRAY), SELBTN_ATT_CENTER,
  285.                 "    %s    \n    インストール先に同名のファイルが存在しています。  ", ccipath );
  286.             goto _RETRY;
  287.         }
  288.         ret = i = 0;
  289.         while ( (p = File3[i++]) != NULL && ret == 0 )
  290.         {
  291.             SYL_puts( C_INFO, "copy %s", p );
  292.             ret = FM_fcopy( p, 0x00, FCOPY_OVERWRITE_CHECK|FCOPY_LAST_MSG_IGN, ccipath, "" );
  293.         }
  294.     }
  295.  
  296.     if ( ret )
  297.     {    /* error */
  298.         MNU_sure( DLGPOS_CENTER_OF_SCN, DLGPOS_CENTER_OF_SCN,
  299.             C_MBLACK, C_DLGBASE, COLMIX(C_ERROR,C_GRAY), SELBTN_ATT_CENTER,
  300.             "FILE COPY ERROR\n    インストールに失敗しました。  " );
  301.         return (-1);
  302.     }
  303.  
  304.     /* アイテム登録    */
  305.     SYL_puts( C_INFO, "アイテム登録" );
  306.     sprintf( ItmPath, "%c:\\tmenu.itm", drv+'A');
  307.     if ( FS_isFileExist(ItmPath) == 0 )
  308.     {    /* アイテムファイルま作成    */
  309.         ITM_CreateItemFile(ItmPath);
  310.     }
  311.     item_set_newpos( frm );
  312.  
  313.     ret = MNU_sure( DLGPOS_CENTER_OF_SCN, DLGPOS_CENTER_OF_SCN,
  314.         C_MBLACK, C_DLGBASE, COLMIX(C_INFO,C_GRAY), SELBTN_ATT_CENTER,
  315.         "    item file %s    \n    アイテム登録を行います。  ", ItmPath );
  316.  
  317.     if ( ret == 0 )
  318.     {
  319.  
  320.         sprintf( tmp, "%s/%s", path, File1[0]);
  321.         FS_unix2dos( prog, tmp+2 );
  322.         FS_strupr( prog );                            /* 大文字に変換    */
  323.         ITM_AddAplItem( ItmPath, 0, 1024, "HEwin", prog, "", 2, frm );
  324.     }
  325.  
  326.     SYL_puts( C_INFO, "***** Completed *****");
  327.     DLG_tmpMsgTime( DLGPOS_CENTER_OF_SCN, DLGPOS_CENTER_OF_SCN,
  328.         C_MBLACK, C_DLGBASE, COLMIX(C_INFO,C_GRAY),
  329.         3, "    インストール終了しました。  " );
  330.  
  331.     return (0);
  332. }
  333.  
  334.  
  335. char    *ScnMsg[8] =
  336. {
  337.     " このプログラムはHEwin をインストールすめためのプログラムです。",
  338.     " 関連ファイルをフロッピィディスクやハードディスクに複写して、",
  339.     " HEwin が使える状態に準備します。",
  340.     "",
  341.     " ディスク容量の関係から、フロッピィディスクにはすべてのファイルは ",
  342.     " 複写できません(必要最小限のファイルのみが複写されます)。",
  343.     NULL
  344. };
  345.  
  346. /*************************************************************************
  347. *    画面
  348. *************************************************************************/
  349.  
  350. int        dsp_init()
  351. {
  352.     int        i, len, x, y;
  353.     char    *p;
  354.  
  355.     DSP_writePage(0);
  356.     DSP_boxf(0,24,639,463,PSET,COLMIX(5,6));
  357.  
  358.     i = 0;
  359.     while ( (p = ScnMsg[i++]) != NULL )
  360.     {
  361.         len = strlen(p);
  362.         x = (640 - len * 8)/2;
  363.         y = 32 + (i * 18);
  364.         DSP_str(x,y,C_MBLACK,5,16,p);
  365.     }
  366. }
  367.  
  368.  
  369. /*************************************************************************
  370. *    MAIN
  371. *************************************************************************/
  372.  
  373. int        main( int argc, char **argv )
  374. {
  375.     char    tmp[256];
  376.  
  377.     init();
  378.     dsp_init();
  379.  
  380.     FS_setFullPathname( tmp, argv[0] );
  381.     FS_getDnam( StartPath, tmp );
  382.  
  383.     install();
  384.  
  385.     term();
  386.     return (0);
  387. }
  388.  
  389.